
package net.sea.setup.action.ext.impl;

import java.io.File;
import java.util.List;
import java.util.Map;

import net.sea.commons.context.AppContext;
import net.sea.commons.util.ELUtils;
import net.sea.commons.util.ELUtils.EL;
import net.sea.commons.util.FileUtils;
import net.sea.commons.util.InstallMsgUtils;
import net.sea.commons.util.OsUtils;
import net.sea.commons.util.ShortcutUtils;
import net.sea.setup.action.AbstractAction;
import net.sea.setup.action.constants.Constants;

/**
 * 创建开始菜单
 *
 * @author huachengwu 
 */
public class ShortcutAction extends AbstractAction {

	/*
	 * 创建快捷菜单安装方法
	 * 
	 * @see
	 * com.ec.setup.action.IAction#install(net.sea.commons.context.AppContext,
	 * java.util.Map)
	 */
	@Override
	public void install(AppContext context, Map<String, String> parMap) {
		// 判断操作系统类型
		if (OsUtils.isFamily("windows")) {
			logger.info(parMap.get(Constants.INSTALL_DESC_KEY));
			InstallMsgUtils.setInstallMsg("创建开始菜单");
			long startTime = System.currentTimeMillis();
			// 开始菜单地址
			String lnkFile = parMap.get(Constants.KEY_DEST_FILE);
			List<EL> els = ELUtils.getVarName(lnkFile);
			for (EL el : els) {
				String value = (String) context.getAttribute(el.getVarName());
				lnkFile = lnkFile.replace(el.getElExp(),
						value.replace("\\", "/"));
			}
			if (logger.isDebugEnabled()) {
				logger.debug("快捷方式地址：" + lnkFile);
			}
			// 开始菜单图标
			String iconFile = parMap.get("icon");
			els = ELUtils.getVarName(iconFile);
			for (EL el : els) {
				String value = (String) context.getAttribute(el.getVarName());
				iconFile = iconFile.replace(el.getElExp(),
						value.replace("\\", "/"));
			}
			if (logger.isDebugEnabled()) {
				logger.debug("快捷方式图标：" + iconFile);
			}
			// 快捷方式类型
			String type = parMap.get("type");
			if (logger.isDebugEnabled()) {
				logger.debug("快捷方式类型" + type);
			}
			try {
				if ("url".equalsIgnoreCase(type)) {
					// 开始菜单URL地址
					String url = parMap.get("url");
					els = ELUtils.getVarName(url);
					for (EL el : els) {
						String value = (String) context.getAttribute(el
								.getVarName());
						url = lnkFile.replace(el.getElExp(),
								value.replace("\\", "/"));
					}
					if (logger.isDebugEnabled()) {
						logger.debug("快捷方式指向的地址：" + url);
					}
					ShortcutUtils.createUrlShortcut(lnkFile, url, iconFile);
				} else if ("app".equalsIgnoreCase(type)) {
					// 源文件地址
					String oriFile = parMap.get(Constants.KEY_ORI_FILE);
					els = ELUtils.getVarName(oriFile);
					for (EL el : els) {
						String value = (String) context.getAttribute(el
								.getVarName());
						oriFile = oriFile.replace(el.getElExp(),
								value.replace("\\", "/"));
					}
					if (logger.isDebugEnabled()) {
						logger.debug("快捷方式指向的文件地址：" + oriFile);
					}
					String scriptFile = ShortcutUtils.createShortcutScript(
							oriFile, lnkFile, iconFile);
					ShortcutUtils.exectue(scriptFile);
				}

			} catch (Exception e) {
				logger.error("创建开始菜单失败", e);
			}
			long endTime = System.currentTimeMillis();
			if (logger.isDebugEnabled()) {
				logger.debug("操作执行时间：" + (endTime - startTime) / 1000.0 + "秒");
			}
		}
	}

	/*
	 * 创建快捷菜单删除方法
	 * 
	 * @see
	 * com.ec.setup.action.IAction#uninstall(net.sea.commons.context.AppContext,
	 * java.util.Map)
	 */
	@Override
	public void uninstall(AppContext context, Map<String, String> parMap) {
		// 判断操作系统类型
		if (OsUtils.isFamily("windows")) {
			logger.info(parMap.get(Constants.UNINSTALL_DESC_KEY));
			long startTime = System.currentTimeMillis();
			// 开始菜单地址
			String lnkFile = parMap.get(Constants.KEY_DEST_FILE);
			List<EL> els = ELUtils.getVarName(lnkFile);
			for (EL el : els) {
				String value = (String) context.getAttribute(el.getVarName());
				lnkFile = lnkFile.replace(el.getElExp(),
						value.replace("\\", "/"));
			}
			try {
				FileUtils.delete(new File(lnkFile).getParentFile());
			} catch (Exception e) {
				logger.error("删除开始菜单失败", e);
			}
			long endTime = System.currentTimeMillis();
			if (logger.isDebugEnabled()) {
				logger.debug("操作执行时间：" + (endTime - startTime) / 1000.0 + "秒");
			}
		}
	}

}

/*
 * 修改历史 $Log$
 */